#!/bin/bash

# 判断必须使用root用户执行 可以是root直接执行也可以是sudo来执行
if [ "$(id -u)" -ne 0 ]; then
    echo "Error: This script must be run as root." >&2
    exit 1
fi

CURRENT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
. ${CURRENT_DIR}/config_common.sh
. ${CURRENT_DIR}/config_node.sh
. ${CURRENT_DIR}/common_function.sh

############################################################
# 1. 部署服务器执行基础环境安装
############################################################

change_ubuntu_mirror
apt-get update
apt-get upgrade -y
apt-get dist-upgrade -y

apt-get install -y ansible sshpass


ssh-keygen -q -t rsa -P '' -f /root/.ssh/id_rsa



############################################################
# 2. 初始化工作节点
############################################################

for i in "${!ALL_NODE_IP_LIST[@]}"; do
    node_ip="${ALL_NODE_IP_LIST[$i]}"
    node_user="${ALL_NODE_USER_LIST[$i]}"
    node_hostname="${ALL_NODE_HOSTNAME_LIST[$i]}"
    
    

    
    echo "正在配置部署服务器普通用户免密登录到 ${node_user}@${node_ip}"
    #echo "${ROOT_PASSWD}" |sudo -S  sshpass -p ${ROOT_PASSWD} ssh-copy-id -o StrictHostKeyChecking=no ${node_user}@${node_ip}
    sshpass -p ${ROOT_PASSWD} ssh-copy-id -o StrictHostKeyChecking=no ${node_user}@${node_ip}

    # 配置工作节点允许root用户登录
    sshpass -p "${ROOT_PASSWD}" ssh -o StrictHostKeyChecking=no ${node_user}@${node_ip} \
"{ echo '${ROOT_PASSWD}'; echo 'PermitRootLogin yes'; } | sudo -S tee -a /etc/ssh/sshd_config > /dev/null"
    
    # 重启工作节点ssh服务
    sshpass -p "${ROOT_PASSWD}" ssh -o StrictHostKeyChecking=no ${node_user}@${node_ip} \
"echo '${ROOT_PASSWD}' | sudo -S systemctl restart ssh && echo 'SSH restart success' || echo 'SSH restart failed'"
    
    # 工作节点设置root密码
    sshpass -p "${ROOT_PASSWD}" ssh -o StrictHostKeyChecking=no ${node_user}@${node_ip} \
"{ echo '${ROOT_PASSWD}'; echo 'root:${ROOT_PASSWD}';} | sudo -S chpasswd"
    
    # 工作节点root用户创建密钥
    sshpass -p "${ROOT_PASSWD}" ssh -o StrictHostKeyChecking=no ${node_user}@${node_ip} <<EOF
echo '${ROOT_PASSWD}' | sudo -S ssh-keygen -q -t rsa -P '' -f /root/.ssh/id_rsa &> /dev/null || true
EOF
    
    
    # 配置部署服务器可以免密登录到节点的root用户
    echo "正在配置免密登录到 root@${node_ip}"
    # 部署服务器的root用户可以免密登录到工作节点的root用户
    # echo "${ROOT_PASSWD}" |sudo -S  sshpass -p ${ROOT_PASSWD} ssh-copy-id -o StrictHostKeyChecking=no root@${node_ip}
    sshpass -p ${ROOT_PASSWD} ssh-copy-id -o StrictHostKeyChecking=no root@${node_ip}

    ssh -t -o StrictHostKeyChecking=no root@${node_ip} "rm -rf /tmp/ubuntu-install-k8s"
    ssh -t -o StrictHostKeyChecking=no root@${node_ip} "mkdir -p /tmp/ubuntu-install-k8s"
    scp -o StrictHostKeyChecking=no ${CURRENT_DIR}/node_init.sh root@${node_ip}:/tmp/ubuntu-install-k8s/node_init.sh
    scp -o StrictHostKeyChecking=no ${CURRENT_DIR}/config_common.sh root@${node_ip}:/tmp/ubuntu-install-k8s/config_common.sh
    scp -o StrictHostKeyChecking=no ${CURRENT_DIR}/common_function.sh root@${node_ip}:/tmp/ubuntu-install-k8s/common_function.sh
    sshpass -p "${ROOT_PASSWD}" ssh -t -o StrictHostKeyChecking=no root@${node_ip} "bash /tmp/ubuntu-install-k8s/node_init.sh ${node_hostname}"

    scp -o StrictHostKeyChecking=no ${CURRENT_DIR}/work_node_sys_config.sh root@${node_ip}:/tmp/ubuntu-install-k8s/work_node_sys_config.sh
    ssh -o StrictHostKeyChecking=no root@${node_ip} "bash /tmp/ubuntu-install-k8s/work_node_sys_config.sh"
done


for i in "${!ALL_NODE_IP_LIST[@]}"; do
    node_ip="${ALL_NODE_IP_LIST[$i]}"
    node_user="${ALL_NODE_USER_LIST[$i]}"
    node_hostname="${ALL_NODE_HOSTNAME_LIST[$i]}"

    for j in "${!ALL_NODE_IP_LIST[@]}"; do
        node_ip_j="${ALL_NODE_IP_LIST[$i]}"
        node_user_j="${ALL_NODE_USER_LIST[$i]}"
        node_hostname_j="${ALL_NODE_HOSTNAME_LIST[$i]}"
        sshpass -p ${ROOT_PASSWD}  ssh -o StrictHostKeyChecking=no root@${node_ip} "sshpass -p ${ROOT_PASSWD} ssh-copy-id -o StrictHostKeyChecking=no root@${node_ip_j}"
    done
done





if [[ ! -f ${CURRENT_DIR}/ezdown ]];then
    echo "ezdown not found, download ezdown tool script first."
    curl -C- -o ${CURRENT_DIR}/ezdown -fLO  --retry 3 https://github.com/easzlab/kubeasz/releases/download/${release}/ezdown
fi
# 使用工具脚本下载
sed -ri "s+^(K8S_BIN_VER=).*$+\1${k8s_version}+g" ${CURRENT_DIR}/ezdown
chmod +x ${CURRENT_DIR}/ezdown

${CURRENT_DIR}/ezdown -D  # 离线安装 docker，检查本地文件，正常会提示所有文件已经下载完成，并上传到本地私有镜像仓库
# ${CURRENT_DIR}/ezdown -P ubuntu_24 # 不下载离线安装包
${CURRENT_DIR}/ezdown -S  # 启动 kubeasz 容器


